﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Collections;
using System.IO;
using System.Diagnostics;

namespace DoAnB
{
    public partial class Main : Form
    {
        public static DataTable datatbTam = new DataTable();
        public static string banguitoisubform;
        public static double tien;
        public static ListView listBanAnStatic;
        public static DataTable dtcomboxNV = new DataTable();

        public Main()
        {
            InitializeComponent();
            tvMenu.ExpandAll();
            if (!Session._isAdmin)
            {
                //quanlyToolStripMenuItem.Visible = false;
                //thốngKêToolStripMenuItem.Visible = false;
            }

            ketnoi data = new ketnoi();
            string sql = "select MaNV, TenNV from NguoiDung where isAdmin = 0";
            dtcomboxNV = data.getDataTable(sql);
            cbbTenNV.DataSource = null;
            cbbTenNV.DataSource = dtcomboxNV;
            cbbTenNV.DisplayMember = "TenNV";
            cbbTenNV.ValueMember = "MaNV";

            cbbTenNV.Enabled = false;

            cbbTenNV.Text = "chọn NV phục vụ";
            DataRow x = dtcomboxNV.NewRow();
            foreach (DataRow i in dtcomboxNV.Rows)
            {
                if (i["TenNV"].ToString() == Session._TenNV.ToString())
                    x = i;
            }
            dtcomboxNV.Rows.Remove(x);
            load_BanAn();

        }
        private void load_BanAn()
        {
            ketnoi data = new ketnoi();
            string sqlBan = "select ID, TenBan From Ban";
            DataTable tbBan = data.getDataTable(sqlBan);
            listBanAn.Clear();
            foreach (DataRow i in tbBan.Rows)
            {
                ListViewItem itemBanMoi = new ListViewItem();
                itemBanMoi.Text = i[1].ToString();
                itemBanMoi.Tag = i[0].ToString();
                itemBanMoi.ImageIndex = 0;
                listBanAn.Items.Add(itemBanMoi);
            }
            xepBanDangPhucVu();
        }

        private void Main_Load(object sender, EventArgs e)
        {
            chàoNVĐãLoginToolStripMenuItem.Text = "Xin chào " + Session._TenNV + " [" + Session._MaNV.ToString() + "]";
            if (datatbTam.Columns.Count == 0)
            {
                datatbTam.Columns.Add("TenBan", typeof(string));
                datatbTam.Columns.Add("IDMonAn", typeof(string));
                datatbTam.Columns.Add("MonAn", typeof(string));
                datatbTam.Columns.Add("SL", typeof(Int32));
                datatbTam.Columns.Add("Gia", typeof(string));
                datatbTam.Columns.Add("Ghichu", typeof(string));
                datatbTam.Columns.Add("PV", typeof(string));
            }

        }

        private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int tam = 0;
            foreach (ListViewItem i in listBanAn.Groups[0].Items)
            {
                tam++;
            }
            if (tam > 0)
                MessageBox.Show("Còn bàn chưa thanh toán", "Cảnh báo!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            else
            {
                DialogResult = MessageBox.Show("Bạn thật sự muốn thoát chứ?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (DialogResult == DialogResult.Yes)
                {
                    Application.Exit();
                }
            }

        }

        private void LogOutToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }



        private void LienHeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmLienHe lh = new frmLienHe();
            lh.ShowDialog();
        }

        private void AboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmAbout ab = new frmAbout();
            ab.ShowDialog();
        }

        private void load_Menu()
        {
            ketnoi data = new ketnoi();
            TreeNode node = tvMenu.SelectedNode;
            DataTable table = new DataTable();
            table.Clear();
            if (node.Name.Equals("RootTA"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 11 and MaLoaiThucPham = 12 and MaLoaiThucPham = 13";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("RootTU"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 21 and MaLoaiThucPham = 22 and MaLoaiThucPham = 23 and MaLoaiThucPham = 24 and MaLoaiThucPham = 25 and MaLoaiThucPham = 26";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeKhaiVi"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 11";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeMonChinh"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 12";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeTrangMieng"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 13";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeGiaiKhat"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 21";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeCafe"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 22";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeNuocEp"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 23";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeBia"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 24";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("NodeCocktails"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 25";
                table = data.getDataTable(selectCmd);
            }
            else if (node.Name.Equals("RootThuocLa"))
            {
                string selectCmd = "Select * from ThucPham where MaLoaiThucPham = 26";
                table = data.getDataTable(selectCmd);
            }
            table.Columns["Ten"].ColumnName = "Tên";
            table.Columns["Gia"].ColumnName = "Đơn Giá";
            table.Columns["DonVi"].ColumnName = "Đơn Vị";
            dgMatHang.DataSource = table;
            dgMatHang.Columns[0].Visible = false;
            dgMatHang.Columns[4].Visible = false;
        }

        private void btChuyenBan_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ") MessageBox.Show("Bàn trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    banguitoisubform = labelTable.Text;
                    frmChuyenBan f = new frmChuyenBan();
                    if (f.ShowDialog() == DialogResult.OK)
                    {
                        labelTable.Text = f.bandachuyen;
                        load_HoaDon();
                    }

                }
            }
        }

   

       

      

        private void btGopBan_Click(object sender, EventArgs e)
        {

            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ") MessageBox.Show("Bàn trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    bool is2Ban = false;
                    foreach (DataRow i in datatbTam.Rows)
                    {
                        if (listBanAn.SelectedItems[0].Text != i["TenBan"].ToString())
                            is2Ban = true;
                    }
                    if (!is2Ban)
                        MessageBox.Show("Chỉ có 1 bàn", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    else
                    {
                        banguitoisubform = labelTable.Text;
                        frmGopBan f = new frmGopBan();
                        if (f.ShowDialog() == DialogResult.OK)
                        {
                            labelTable.Text = f.bandagop;
                            load_HoaDon();

                        }
                    }

                }
            }
        }

        private void btThanhToan_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ")
                    MessageBox.Show("Bàn trống!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    banguitoisubform = labelTable.Text;
                    tien = double.Parse(labelTienXX.Text.ToString());
                    frmThanhToan tt = new frmThanhToan();
                    if (tt.ShowDialog() == DialogResult.OK)
                    {
                        //// Them cai insert xuong csdl zo day
                        ketnoi data = new ketnoi();
                        string sqlHoaDon = "INSERT INTO HoaDon(NgayBan, GiaTri, MaNV, MaBan) VALUES('" + DateTime.Now.ToString("yyyy-MM-dd") + "'," + tien.ToString() + ",'" + cbbTenNV.SelectedValue + "','" + listBanAn.SelectedItems[0].Tag.ToString() + "')";
                        //txtghichu.Text = sqlHoaDon;
                        data.ExeCuteNonQuery(sqlHoaDon);

                        string sqlLayMaHoaDon = "SELECT MAX(MaHoaDon) as MHD FROM HoaDon";
                        DataTable dt = data.getDataTable(sqlLayMaHoaDon);
                        int mahoadon = int.Parse(dt.Rows[0][0].ToString());
                        foreach (ListViewItem i in listHoaDon.Items)
                        {
                            string slqChiTietRow = "SET IDENTITY_INSERT ChiTietHoaDon ON INSERT INTO ChiTietHoaDon(MaHoaDon, MaSanPham, SoLuongDoDung) VALUES(" + mahoadon + "," + i.Tag + "," + i.SubItems[1].Text + ") SET IDENTITY_INSERT ChiTietHoaDon OFF";
                            data.ExeCuteNonQuery(slqChiTietRow);
                            //txtghichu.Text = slqChiTietRow;
                        }
                        //// loc danh sach nhung dong can xoa moi xoa dc //// search cai nay met
                        List<DataRow> rowsToDelete = new List<DataRow>();
                        foreach (DataRow DR in datatbTam.Rows)
                        {
                            if (DR[0].ToString() == labelTable.Text)
                                rowsToDelete.Add(DR);
                        }
                        foreach (var r in rowsToDelete)
                            datatbTam.Rows.Remove(r);
                        labelTable.Text = "Chưa chọn bàn";
                        load_HoaDon();
                    }
                }
            }
            xepBanDangPhucVu();
        }

        private void tvMenu_AfterSelect(object sender, TreeViewEventArgs e)
        {
            load_Menu();
        }
        private void xepBanDangPhucVu()
        {
            foreach (ListViewItem itemlvRow in listBanAn.Items)
            {
                int i = 0;
                foreach (DataRow row in datatbTam.Rows)
                {
                    if (itemlvRow.Text == row[0].ToString())
                        i++;
                    itemlvRow.ImageIndex = 1;
                }
                if (i > 0) itemlvRow.Group = listBanAn.Groups[0];
                else
                {
                    itemlvRow.Group = listBanAn.Groups[1];
                    itemlvRow.ImageIndex = 0;
                }
            }
        }

        private void load_HoaDon()
        {
            listBanAnStatic = listBanAn;
            bool PV = false;
            listHoaDon.Items.Clear();
            double tien = 0;
            foreach (DataRow Row in datatbTam.Rows)
            {
                if (Row[0].ToString() == labelTable.Text)
                {
                    tien += double.Parse(Row[3].ToString()) * double.Parse(Row[4].ToString());
                    PV = true;
                    cbbTenNV.Enabled = true;
                    cbbTenNV.Text = null;
                    cbbTenNV.SelectedIndex = int.Parse(Row[6].ToString());
                    cbbTenNV.Enabled = false;
                    ListViewItem item = new ListViewItem(Row[2].ToString());
                    item.Tag = Row[1].ToString();
                    for (int i = 3; i < datatbTam.Columns.Count; i++)
                    {
                        item.SubItems.Add(Row[i].ToString());
                    }
                    listHoaDon.Items.Add(item);
                }

            }
            labelTienXX.Text = tien.ToString("###,###,##0");
            if (PV == false)
            {
                cbbTenNV.Enabled = true;
                cbbTenNV.Text = "chọn NV phục vụ";
            }
            xepBanDangPhucVu();
        }


        private void listBanAn_Click(object sender, EventArgs e)
        {
            labelTable.Text = listBanAn.SelectedItems[0].Text.ToString();
            load_HoaDon();
        }

        private void btThem_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ") MessageBox.Show("Chưa chọn nhân viên phục vụ!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    if (dgMatHang.DataSource == null) MessageBox.Show("Chưa chọn món ăn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    else
                    {

                        string tenban = labelTable.Text;
                        string IDmonan = dgMatHang.SelectedRows[0].Cells[0].Value.ToString();
                        string tenmon = dgMatHang.SelectedRows[0].Cells[1].Value.ToString();
                        int sl = int.Parse(cbbSoLuong.SelectedItem.ToString());
                        string gia = dgMatHang.SelectedRows[0].Cells[2].Value.ToString();
                        string PV = cbbTenNV.SelectedIndex.ToString();
                        foreach (DataRow i in datatbTam.Rows)
                        {
                            if (i["TenBan"].ToString() == tenban && i["IDMonAn"].ToString() == IDmonan)
                            {
                                i["SL"] = (int)i["SL"] + sl;
                                sl = 0;
                            }
                        }
                        if (sl > 0)
                            datatbTam.Rows.Add(tenban, IDmonan, tenmon, sl, gia, txtghichu.Text, PV);


                        load_HoaDon();
                        cbbSoLuong.SelectedIndex = 0;
                        txtghichu.Clear();
                    }
                }
            }
        }

        private void btXoa_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn xóa!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (listHoaDon.SelectedItems.Count == 0)
                    MessageBox.Show("Chưa chọn món xóa!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    // Chay va xoa 1 dong
                    foreach (DataRow Row in datatbTam.Rows)
                    {
                        if (Row[1].ToString() == listHoaDon.SelectedItems[0].Tag.ToString() && Row[0].ToString() == labelTable.Text)
                        {
                            Row.Delete();
                            break;
                        }
                    }
                    load_HoaDon();
                }
            }
        }
        private void writeToFile()
        {
            String today = DateTime.Today.ToShortDateString();
            int rows = listHoaDon.Items.Count;
            using (FileStream stream = new FileStream("D:/" + labelTable.Text + ".txt", FileMode.Create))
            {
                using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
                {
                    writer.WriteLine("Amumu - Phần mềm quản lý quán ăn - cafe");
                    writer.WriteLine("");
                    writer.WriteLine("Ngày: " + today);
                    writer.WriteLine("");
                    writer.WriteLine("Order Slip");
                    writer.WriteLine("");
                    for (int i = 0; i < rows; i++)
                    {
                        String productname = listHoaDon.Items[i].SubItems[0].Text.ToString();
                        String sl = listHoaDon.Items[i].SubItems[1].Text.ToString();
                        String des = listHoaDon.Items[i].SubItems[3].Text.ToString();
                        writer.WriteLine((i + 1) + "\t" + productname + "\t" + sl + "\t" + des);
                    }
                    writer.WriteLine("");
                    writer.WriteLine("Nhân viên order: " + cbbTenNV.Text);
                    writer.Close();
                }
                stream.Close();
            }
        }
        private void btIn_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ")
                    MessageBox.Show("Bàn trống!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    writeToFile();
                    MessageBox.Show("Đã in xuống bếp");
                }
            }
        }





        private void huyban_Click(object sender, EventArgs e)
        {
            if (labelTable.Text == "Chưa chọn bàn")
                MessageBox.Show("Chưa chọn bàn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                if (cbbTenNV.Text == "chọn NV phục vụ") MessageBox.Show("Bàn trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                else
                {
                    if (MessageBox.Show("Bạn có chắc muốn hủy bàn?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        List<DataRow> rowsToDelete = new List<DataRow>();
                        foreach (DataRow DR in datatbTam.Rows)
                        {
                            if (DR[0].ToString() == labelTable.Text)
                                rowsToDelete.Add(DR);
                        }
                        foreach (var r in rowsToDelete)
                            datatbTam.Rows.Remove(r);
                        labelTable.Text = "Chưa chọn bàn";
                        load_HoaDon();
                    }
                }
            }
        }

        private void themban()
        {

            int tmp = 0;
            foreach (ListViewItem i in listBanAn.Groups[1].Items)
                tmp++;
            if (tmp > 0)
                MessageBox.Show("Vẫn còn bàn", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {


                foreach (ListViewItem i in listBanAn.Groups[0].Items)
                    tmp++;

                ListViewItem itemBanMoi = new ListViewItem();
                tmp++;
                itemBanMoi.Text = "Bàn " + tmp + " (phụ)";
                itemBanMoi.ImageIndex = 0;
                listBanAn.Items.Add(itemBanMoi);

                listBanAn.Items[tmp - 1].Group = listBanAn.Groups[1];
                xepBanDangPhucVu();

                labelTable.Text = "Chưa chọn bàn";
                cbbTenNV.Enabled = false;
            }
        }
        private void themBan_Click(object sender, EventArgs e)
        {
            themban();
        }


        private void thốngKêToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tkDoanhThuNV f = new tkDoanhThuNV();
            f.ShowDialog();
        }

        private void bànĂnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            qlBanAn f = new qlBanAn();
            f.ShowDialog();
            if (f.DialogResult == DialogResult.OK)
                load_BanAn();
        }

        private void logOutToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Main_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult = MessageBox.Show("Bạn thật sự muốn thoát chứ?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (DialogResult == DialogResult.Yes)
            {
                Session._MaNV = 0;
                Session._TenNV = "";
            }
            else e.Cancel = true;
        }

        private void cậpNhậtCáNhânToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmCapNhatCaNhan f = new frmCapNhatCaNhan();
            f.ShowDialog();
        }

        private void đổiMậtKhẩuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmDoiMatKhau f = new frmDoiMatKhau();
            f.ShowDialog();
        }

        private void đổiMãPINToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmDoiMaPIN f = new frmDoiMaPIN();
            f.ShowDialog();
        }

        private void hướngDẫnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start("C:\\Users\\Azure\\Desktop\\huongdan.docx");
        }




    }
}
